Migration
&
refonte

Le cas son-video.com

About Me

About son-video.com

En quelques chiffres
➥ créé en 2002
➥ env. 70 personnes
➥ >30k références
➥ >25 M€ CA principalement via le site
➥ 8 magasins en France

15 ans de LAMP

Signaux d’alarmes tardifs
➥ Problèmes de performances.
➥ Résistance aux changements.
➥ Dégradation des relations IT.

15 ans de LAMP

Anatomie d’une application “Legacy”
➥ Plusieurs strates de code.
➥ Pas de couverture de tests.
➥ Monolith fonctionnel.

15 ans de LAMP

Anatomie d’une base de données “Legacy”
➥ Structure « incrémentale ».
➥ Couche modèle sous forme de procédures.
➥ Beaucoup d’actions métier via Triggers.

Monolithe structurel

On partage les problèmes
Problèmes de charge.
Problèmes de bugs.
Problèmes de cohérence.

Inside the monolith

Coût d’une appli avec tests

Coût d’une appli sans tests

Refondre un monolithe…

Axiome de départ

Q : Comment faire des applications conséquentes & plus simples à maintenir ?
R : Ne pas faire d’application grosse & complexe.

Du monolithe…

…aux microlithes

Bounded contexts

➥ Qui a autorité sur…
➥ Les produits ? Les clients ? Les commandes ?
➥ On utilise un eventstore: Synapps
➥ Modèles enrichis localement

Chantiers

Plusieurs chantiers

➥ Bases de données
➥ Projet CMS
➥ Migration Legacy → CMS
➥ Projet Bridge

Projet CMS

PHP ⇔ SQL via Pomm
➥ Les développeurs PHP font du SQL.
➥ Convertit tous les types de Pg ⇔ PHP.
➥ Centralise les projections des entités métier.

Projet CMS

Que nous apporte Postgres ?
➥ Taxonomie, rayons (LTree) & catégories.
➥ Requêtes récursives (attributs, produits obsolètes etc.)
➥ Objets Pg, transtypage & JSONb.
➥ FTS (unaccent).

Migration continue

TELT en phase avec les sprints
➥ Vues MySQL
➥ PgLoader FTW!
➥ Transformations Postgres (images)
pg_tap is not an option

Projet Bridge

Synchronisation Legacy
➥ API PHP
➥ Foreign tables MySQL & vues mat.
➥ Niveau de charge ≈ constant
➥ Recherche de changements avec des hash

Synapps

Synchronisation d’applications
➥ Consommateur AMQP & API PHP.
➥ Timetable
➥ Numérotation séquentielle des événements.
➥ Serveur de nom du portefeuille de services.

Le jour J et après…

Jour de la migration

Intervention nocturne en WE.
➥ synchronisation des médias.
➥ synchronisation des mktplaces.
➥ site en lecture seule 12h avant.

Jour de la migration

Migration de bases de données.
➥ Préalablement jouée avec les tests.
➥ Synchronisation des images.
➥ Fermeture du site pendant cette opération.

Jour de la migration

Synapps…
➥ Démarrage des services.
➥ Synchronisation via Synapps (env. 120k).
➥ Bascule DNS.

Retours

Le SOA, ça marche
➥ Actions asynchrones
➥ Charges serveurs décorrélées
➥ Facilité d’ajout de services

Merci Postgres pour…

➥ Les transformations de migration.
➥ Les types riches.
➥ Les foreign data wrapper.
➥ Les indexes GIN & GIST.
➥ Les extensions.
➥ And so much more…

Merci…

…questions ?